//package com.learn.enums;
//
//import com.alibaba.fastjson2.JSON;
//import com.alibaba.fastjson2.JSONArray;
//import com.alibaba.fastjson2.JSONObject;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.data.redis.core.StringRedisTemplate;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.Resource;
//import java.util.List;
//import java.util.Map;
//import java.util.Objects;
//import java.util.concurrent.TimeUnit;
//
//@Slf4j
//@Component
//public class RedisMethod {
//
//    @Resource
//    private StringRedisTemplate stringRedisTemplate;
//
//
//    /**
//     * set redis: string类型
//     * @param cacheKeyEnum cacheKeyEnum
//     * @param value value
//     */
//    public void setString(CacheKeyEnum cacheKeyEnum, String key,String value){
//        //null值时不存；可以自定义什么时候才存值
//        if(!Objects.equals(value,null)) {
//            log.info("正在加载{}缓存...",cacheKeyEnum.cacheKey + key);
//            stringRedisTemplate.opsForValue().set(cacheKeyEnum.cacheKey + key, value);
//        }
//        //当传入-1的时候则表示永久缓存（不设置缓存时间）
//        if (cacheKeyEnum.cacheTime!=-1)
//            this.setTimeOut(cacheKeyEnum.cacheKey + key, cacheKeyEnum.cacheTime, cacheKeyEnum.timeType);
//        log.info("加载{}缓存完成",cacheKeyEnum.cacheKey + key);
//
//    }
//
//    /**
//     * get redis: string类型
//     * @param cacheKeyEnum cacheKeyEnum
//     * @return
//     */
//    public String getString(CacheKeyEnum cacheKeyEnum, String key){
//        log.info("正在获取{}缓存...",cacheKeyEnum.cacheKey + key);
//        return stringRedisTemplate.opsForValue().get(cacheKeyEnum.cacheKey + key);
//    }
//
//    /**
//     * set redis: hashMap类型
//     * @param cacheKeyEnum cacheKeyEnum
//     * @param map map
//     */
//    public void setHash(CacheKeyEnum cacheKeyEnum, String key, Map<?,?> map){ //使用通配符是可以传入任意类型的map
//        if (!map.isEmpty()) {
//            log.info("正在加载{}缓存...", cacheKeyEnum.cacheKey + key);
//            stringRedisTemplate.opsForValue().set(cacheKeyEnum.cacheKey + key, JSONObject.toJSONString(map));
//        }
//        if (cacheKeyEnum.cacheTime!=-1)
//            this.setTimeOut(cacheKeyEnum.cacheKey + key, cacheKeyEnum.cacheTime, cacheKeyEnum.timeType);
//        log.info("加载{}缓存完成",cacheKeyEnum.cacheKey + key);
//
//
//    }
//
//    /**
//     * get redis: hashMap类型
//     * @param key key
//     * @param cacheKeyEnum cacheKeyEnum
//     * @return
//     */
//    public Map<?,?> getHash(CacheKeyEnum cacheKeyEnum, String key){
//        log.info("正在获取{}缓存...",cacheKeyEnum.cacheKey + key);
//        return JSON.parseObject(stringRedisTemplate.boundValueOps(cacheKeyEnum.cacheKey + key).get());
//
//    }
//
//    /**
//     * set redis:list类型
//     * @param cacheKeyEnum cacheKeyEnum
//     * @param list list
//     * @return
//     */
//    public void setList(CacheKeyEnum cacheKeyEnum,String key, List<?> list){
//        if (!list.isEmpty()) {
//            log.info("正在加载{}缓存...", cacheKeyEnum.cacheKey + key);
//            stringRedisTemplate.opsForValue().set(cacheKeyEnum.cacheKey + key, JSONObject.toJSONString(list));
//        }
//        if (cacheKeyEnum.cacheTime!=-1)
//            this.setTimeOut(cacheKeyEnum.cacheKey + key, cacheKeyEnum.cacheTime, cacheKeyEnum.timeType);
//        log.info("加载{}缓存完成",cacheKeyEnum.cacheKey + key);
//    }
//
//    /**
//     * get redis:list类型
//     * @param key key
//     * @param cacheKeyEnum cacheKeyEnum
//     * @return
//     */
//    public List<?> getList(CacheKeyEnum cacheKeyEnum,String key){
//        log.info("正在获取{}缓存...",cacheKeyEnum.cacheKey + key);
//        return JSONArray.parseArray(stringRedisTemplate.boundValueOps(cacheKeyEnum.cacheKey + key).get());
//    }
//
//
//    /**
//     * 删除key
//     * @param cacheKeyEnum cacheKeyEnum
//     */
//    public void deleteKey(CacheKeyEnum cacheKeyEnum,String key) {
//        log.info("正在删除{}缓存...",cacheKeyEnum.cacheKey + key);
//        stringRedisTemplate.delete(cacheKeyEnum.cacheKey + key);
//        log.info("删除{}缓存完成",cacheKeyEnum.cacheKey + key);
//
//    }
//
//
//    /**
//     * 设置key失效时间
//     *
//     * @param time_type time_type
//     * @param key       key
//     * @param timeout   timeout
//     */
//    public void setTimeOut(String key, long timeout, String time_type) {
//        switch (Objects.requireNonNull(time_type)) {
//            case "sec" -> stringRedisTemplate.expire(key, timeout, TimeUnit.SECONDS);
//            case "min" -> stringRedisTemplate.expire(key, timeout, TimeUnit.MINUTES);
//            case "hour" -> stringRedisTemplate.expire(key, timeout, TimeUnit.HOURS);
//            case "day" -> stringRedisTemplate.expire(key, timeout, TimeUnit.DAYS);
//            default -> {
//            }
//        }
//    }
//
//}
